-- %%NOBANNER%% -->
/*------------------<-- Start of Description -->--------------------\ | Sample size for two independent proportions; | |--------------------<-- End of Description -->---------------------| |--------------------------------------------------------------------| |--------------<-- Start of Files or Arguments Needed -->-----------| | Arguments: | | - Required: | | y1 = true proportion under null hypothesis, 0------------| |--------------------------------------------------------------------| |----------------<-- Start of Example and Usage -->-----------------| | Example: %prop2_ss(sides=1,y1=.04,min_y2=.30,max_y2=.4,inc_y2=.01, | | power=.9,plot=p); | | Usage: %prop2_ss(ALPHA=.05,SIDES=2,POWER=.80,Y1=.,MIN_Y2=., | | MAX_Y2=.,INC_Y2=.,R=1,PLOT= ); | | Reference: Bergstralh, EJ. SAS macros for sample size and power | | calculations. Proceedings of the 9th annual SAS Users | | Group International Conference. | | Equation #'s 13 and 14. | \-------------------<-- End of Example and Usage -->---------------*/ %MACRO prop2_ss(ALPHA=.05,SIDES=2,POWER=.80,Y1=.,MIN_Y2=., MAX_Y2=.,INC_Y2=.,R=1,PLOT= ); /*--------------------------------------------\ | Author: Michael Riggs and Eric Bergstralh; | | Purpose: Sample Size for two independent | | proportions; | \--------------------------------------------*/ OPTIONS MISSING=' ' NOCENTER; %LET PLOT=%UPCASE(&PLOT); DATA T1; ALPHA=&ALPHA; SIDES=&SIDES; Y1=&Y1; MIN_Y2=&MIN_Y2; MAX_Y2=&MAX_Y2; INC_Y2=&INC_Y2; POWER=&POWER; R=&R; ZALPHA=(PROBIT(1-ALPHA))*(SIDES=1) + (PROBIT(1-ALPHA/2))*(SIDES=2); ZBETA=PROBIT(POWER); IF MAX_Y2=. THEN DO; MAX_Y2=MIN_Y2+1; INC_Y2=MIN_Y2+2; *NEED 1 EXEC OF DO; END; TY1=Y1; TR=R; DO Y2=MIN_Y2 TO MAX_Y2 BY INC_Y2; PBAR=(TY1+TR*Y2)/(1+TR); *NORMAL APPROX. TO BINOMIAL; N1_NML=( (ZALPHA*SQRT(PBAR*(1-PBAR)*(1+1/TR)) + ZBETA*SQRT(TY1*(1-TY1)+Y2*(1-Y2)/TR)) / (Y2-TY1) )**2; N1_NML=CEIL(N1_NML); N2_NML=TR*N1_NML; *NORMAL APPROX. FOLLOWING 2*ARCSIN(SQRT(PROP.)) TRANSFORMATION; AS_Y1=2*ARSIN(SQRT(TY1)); AS_Y2=2*ARSIN(SQRT(Y2)); N1_ARS=(((ZALPHA+ZBETA)/(AS_Y1-AS_Y2) )**2)*(1+1/TR); N1_ARS=CEIL(N1_ARS); N2_ARS=TR*N1_ARS; *---------------------------------------------------; REL_RISK=Y2/TY1; ODD_RATO=(Y2*(1-TY1))/(TY1*(1-Y2)); FORMAT REL_RISK ODD_RATO 7.2; *---------------------------------------------------; OUTPUT; END; LABEL Y1='Group 1*Proportion' Y2='Group 2*Proportion' REL_RISK='Relative*Risk' ODD_RATO='Odds*Ratio' N1_NML='Group 1*Sample Size*Binomial @' N2_NML='Group 2*Sample Size*Binomial @' N1_ARS='Group 1*Sample Size*Arcsin @@' N2_ARS='Group 2*Sample Size*Arcsin @@'; RUN; PROC PRINT SPLIT='*'; ID y1; var y2 rel_risk odd_rato n1_nml n2_nml n1_ars n2_ars; TITLE2 'SAMPLE SIZE REQUIREMENTS FOR TWO INDEPENDENT PROPORTIONS'; TITLE3 "Alpha=&alpha, Sides=&sides, Power=&power, Ratio N2/N1=&r"; Title4"Group 1 true proportion=&y1"; FOOTNOTE1 '@, Normal approximation to binomial.'; FOOTNOTE2 '@@, Arcsin transformation followed by normal approximation.'; %IF &MAX_Y2 NE . %THEN %DO; %IF &PLOT= P %THEN %DO; PROC PLOT NOLEGEND; PLOT N2_NML*Y2='N' N2_ARS*Y2='A' / OVERLAY; LABEL N2_NML='Sample size for Group 2' Y2='True Group 2 proportion'; FOOTNOTE1 'N=Normal approximation to the binomial'; FOOTNOTE2 'A=Arcsin transformation followed by normal approximation'; %END; %ELSE %IF &PLOT= G %THEN %DO; SYMBOL1 F=SPECIAL V=J H=1 I=j l=1; SYMBOL2 F=SPECIAL V=m H=1 i=j l=2; PROC GPLOT ; PLOT N2_NML*Y2 N2_ARS*Y2 / overlay; LABEL N2_NML='Group 2 sample size' Y2='True Group 2 proportion'; FOOTNOTE1 F=SPECIAL ' ' M=(+6,-.7) H=2 'K' F=TRIPLEX H=1 M=(-.5,+.3) ' Normal approx. to binomial' F=SPECIAL M=(+6 -.4) H=2 'M' F=TRIPLEX H=1 M=(-.5,+.4) ' Normal approx. with arcsin'; run; quit; %END; RUN; %END; %MEND prop2_ss;